昨天講到了 exit code ,今天來講 exit code 的應用吧。
既然 exit code 可以拿來識別成功失敗,那麼拿來跟 if 配在一起用就在合理不過了:
if echo msg; then
echo successful
fi
由於 Shell 沒有大括號 {}
,也不像 Python 用縮排定位,所以這裡就用 if 跟 fi 要執行的命令包起來。當然 Shell 裡面的 if 是可以有 else 的:
if rm record.txt; then
echo delete succssful
else
echo delete failed
fi
接著來介紹一個好用的指令:[
對別懷疑這個也是 Shell 可以呼叫的程式,就叫做 [
。他本身不會回傳任何訊息,但是會回傳 exit code 方便使用,以下是幾個常用的方式:
[ -n "$VAR"]
:判斷字串有沒有內容[ "$VAR" == "STR" ]
:判斷 $VAR
的內容是否與 STR
相等[ "$VAR" != "STR" ]
:判斷 $VAR
的內容是否與 STR
不相等[ -e ./node_module ]
:判斷檔案是否存在(無論資料夾或檔案)[ -d ./node_module ]
:判斷資料夾是否存在[ -f package.json ]
:判斷檔案是否存在(不可以是資料夾)其他就請自己 man [
來查囉。
除了用 if
寫好幾行的判斷外,其實 &&
與 ||
也有類似效果,當你需要把指令縮成一行(像是你要在 package.json 裡面插入判斷式的時候),以上面的
if rm record.txt; then
echo delete succssful
else
echo delete failed
fi
來講,你可以把他寫成 rm record.txt && echo successful || echo failed
。
那分號的功能呢?假如你寫了以下的判斷式:
if [ -d node_module]; then
rm -rf node_module
fi
npm install
要怎麼塞成一行呢?平常我們可以用換行表示上一個指令結束,不過為了縮成一行,我們就用 ;
來代替換行吧:[ -d node_module] && rm -rf node_module; npm install
,是的跟 Python 有點像,可以用 ;
來取代換行。
我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。